package lv.clientedisqueria.model.disco;

import java.util.ArrayList;
import java.util.List;

import lv.clientedisqueria.client.ClienteServer;
import lv.clientedisqueria.model.DisqueriaTablaModelo;
import lv.clientedisqueria.model.Modelo;
import lv.mensajeriadisqueria.dto.DiscoDto;
import lv.mensajeriadisqueria.dto.EstiloDto;
import lv.mensajeriadisqueria.dto.RolDto;
import lv.mensajeriadisqueria.dto.TipoSoporteDto;
import lv.mensajeriadisqueria.dto.UsuarioDto;
import lv.mensajeriadisqueria.idomain.IColeccion;
import lv.mensajeriadisqueria.idomain.IDisco;
import lv.mensajeriadisqueria.idomain.IEstilo;
import lv.mensajeriadisqueria.idomain.IRol;
import lv.mensajeriadisqueria.idomain.ITipoSoporte;
import lv.mensajeriadisqueria.idomain.IUsuario;
import lv.mensajeriadisqueria.mensaje.Mensaje;



public class DiscoModel extends Modelo<IDisco> {
	
	private final static String PROPERTY_CHANGE_CAMBIAR_DISCO = "cambiarDisco";
	
	private final DiscoTablaModel discoTablaModel;
	
	public DiscoModel() {
		discoTablaModel = new DiscoTablaModel(this);
	}

	@Override
	public String getPropertyChangeCambio() {
		return PROPERTY_CHANGE_CAMBIAR_DISCO;
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<IDisco> buscarTodos() {
		ClienteServer.getInstance().mandarMensaje(Mensaje.TODOS, new DiscoDto());
		return (List<IDisco>) ClienteServer.getInstance().getObjeto();
	}

	public void borrar() {
		ClienteServer.getInstance().mandarMensaje(Mensaje.BAJA, discoTablaModel.getSeleccionado());
		discoTablaModel.remover();
		notificar(Modelo.BORRAR);		
		/* TODO aca hay que llamar al clienteserver para que haga el pedido
		discoTablaModel.remover();
		notificar(Modelo.BORRAR);*/
	}

	public void insertar() {
		discoTablaModel.adherirOModificar(new DiscoDto());
		notificar(Modelo.INSERTAR);
	}
	public void guardar(IDisco disco) {
		if (disco.getIdDisco() != null) {
			ClienteServer.getInstance().mandarMensaje(Mensaje.MODIFICAR, disco);
		} else {
			ClienteServer.getInstance().mandarMensaje(Mensaje.ALTA, disco);
		}
		IDisco discoDto = (IDisco)ClienteServer.getInstance().getObjeto();
		disco.setIdDisco(discoDto.getIdDisco());
		discoTablaModel.adherirOModificar(disco);
		notificar(Modelo.GUARDADO);
			
		/*discoTablaModel.adherirOModificar(new DiscoDto());
		notificar(Modelo.INSERTAR);
		 TODO Aca hay que llamar al server para guardar el objeto.
		discoTablaModel.adherirOModificar(disco);
		notificar(Modelo.GUARDADO);*/
	}

	@Override
	public DisqueriaTablaModelo<IDisco> getTablaModel() {
		return discoTablaModel;
	}

	public void adherirVersiones() {
		// TODO Auto-generated method stub
		
	}

	@SuppressWarnings("unchecked")
	public List<IColeccion> buscarColecciones() {
		ClienteServer.getInstance().mandarMensaje(Mensaje.TODOS, new ColeccionDto());
		return (List<IColeccion>) ClienteServer.getInstance().getObjeto();
	}

	@SuppressWarnings("unchecked")
	public List<IEstilo> buscarEstilo() {
		ClienteServer.getInstance().mandarMensaje(Mensaje.TODOS, new EstiloDto());
		return (List<IEstilo>) ClienteServer.getInstance().getObjeto();
	}

	@SuppressWarnings("unchecked")
	public List<ITipoSoporte> buscarSoporte() {
		ClienteServer.getInstance().mandarMensaje(Mensaje.TODOS, new TipoSoporteDto());
		return (List<ITipoSoporte>) ClienteServer.getInstance().getObjeto();
	}
}
